!ソース保管
コメントやデバッグコードもそのまま
>>>
#include <SoftModem.h> //ライブラリをインクルード
#include <ctype.h>
SoftModem modem; //SoftModemのインスタンスを作る
int latchPin = 9;
int clockPin = 13;
int dataPin = 11;
int ledPin = 10;
void setup(){
modem.begin(); // setup()でbeginをコールする
//
pinMode(latchPin,OUTPUT);
pinMode(clockPin,OUTPUT);
pinMode(dataPin,OUTPUT);
pinMode(ledPin,OUTPUT);
Serial.begin(9600);
Serial.println("Hello");
}
int pattern[] = { //-------[DOT]
B11110110,
B00100010,
B10111100,
B10111010,
B01101010,
B11011010,
B11011110,
B01110010,
B11111111,
B11111010
/*
B11011111, //0
B10000011, //1
B01110111, //2
B11100111, //3
B10101011, //4
B11101101, //5
B11111101, //6
B10001111, //7
B11111111, //8
B11101111, //9
*/
};
int data[] = {0,1,2,3,4,5,6,7,8,9,0}; // 11 segments value
int data_in[] = {0,1,2,3,4,5,6,7,8,9,0}; // 11 segments value
int check_sum = 0;
/*1,2,3,4 */
int count = 0;
int mode = B11111111;
int rcount = 0;
int icount = 0;
int index = 0;
void loop(){
while(modem.available()){ //iPhoneからデータ受信しているか確認
int c = modem.read(); //1byteリード
if(isprint(c) && isdigit(c)){
if(index == 11){
if(check_sum == c - '0'){
// valid!
for(int j=0;j<11;j++){
data[j] = data_in[j];
}
Serial.println("valid!");
}else{
Serial.println("invalid!");
}
}else{
data_in[index] = c - '0';
check_sum = (check_sum + c - '0') % 10;
index++;
}
icount = 100;
for(int j=0;j<11;j++){
Serial.print(data_in[j]);
}
Serial.println();
for(int j=0;j<11;j++){
Serial.print(data[j]);
}
l Serial.println();
}
else{
// 無視
}
// for debug
if(isprint(c)){
Serial.print((char)c); //PCに送信
Serial.print("("); //表示できない文字はHexで表示
Serial.print(c,HEX);
Serial.println(")");
}
else{
Serial.print("("); //表示できない文字はHexで表示
Serial.print(c,HEX);
Serial.println(")");
}
}
if(icount >0){
icount --;
if(icount == 0){
index = 0;
check_sum = 0;
}
}
/*
// full mode
count ++;
if(count>11)count = 0;
for(int i=0; i<11; i++){
if(count == i){
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, (i-8>0)?~(1<< (i-8)):0);
shiftOut(dataPin, clockPin, MSBFIRST, ~(1 << i));
shiftOut(dataPin, clockPin, LSBFIRST, pattern[data[i]]);
digitalWrite(latchPin, HIGH);
}
}
*/
// rinban mode
rcount ++;
if(rcount > 9600)rcount = 0;
if(rcount > 4800){
digitalWrite(ledPin,HIGH);
}else{
digitalWrite(ledPin,LOW);
}
if(/*rcount>4800 || */false){
count ++;
if(count>4)count = 0;
for(int i=0; i<4; i++){
if(count == i){
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, (i-8>0)?~(1<< (i-8)):0);
shiftOut(dataPin, clockPin, MSBFIRST, ~(1 << i));
shiftOut(dataPin, clockPin, LSBFIRST, pattern[data[i]]);
digitalWrite(latchPin, HIGH);
}
}
}else{
count ++;
if(count>11)count = 0;
for(int i=0; i<11; i++){
if(count == i){
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, (i-8>=0)?(~(1<< (i-8))):B11111111);
//shiftOut(dataPin, clockPin, MSBFIRST, B11111111);
shiftOut(dataPin, clockPin, MSBFIRST, ~(1 << i));
shiftOut(dataPin, clockPin, LSBFIRST, pattern[data[i]]);
digitalWrite(latchPin, HIGH);
}
}
}
/*
for(int i=2; i<4+2; i++){
if(count == i){
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, ~(1<< (i-8)));
shiftOut(dataPin, clockPin, LSBFIRST, ~(1 << i));
shiftOut(dataPin, clockPin, LSBFIRST, pattern[data[i]]);
digitalWrite(latchPin, HIGH);
}
}*/
/*
if(count == 0){
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B10111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11000000);
digitalWrite(latchPin, HIGH);
//digitalWrite(selectPin2,LOW);
//digitalWrite(selectPin,HIGH);
}else if(count == 1){
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11011111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
digitalWrite(latchPin, HIGH);
} else{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B11111111);
shiftOut(dataPin, clockPin, LSBFIRST, B00000000);
digitalWrite(latchPin, HIGH);
// digitalWrite(latchPin, LOW);
//shiftOut(dataPin, clockPin, LSBFIRST, B00000000);
// digitalWrite(latchPin, HIGH);
// digitalWrite(selectPin,LOW);
// digitalWrite(selectPin2,HIGH);
}
*/
//delay(30);
}
<<<5643382
wiki
1316088195