Arduino의 Serial 모니터에서 두 자리 이상의 숫자를받는 템플릿
14038 단어 Arduino
개요
제목대로
있으면 편리하지만 인터넷에 유용한 템플릿을 찾을 수 없었기 때문에
참고 : htps : // 코 m / 히코 lp는 / ms / 633c677f5cd12d536dc
사용상의 주의
에서 줄 바꿈을 "LF"로 만드십시오.
LF는 10진수로 "10"입니다.
주의: 4자리 이상이 되면 pow 함수의 오차가 커지므로
int(pow(10,3))=999
코드
byte NUMs[100]; //データ保存用
int digit_inv=0; //保存桁番号逆順
void setup() {
Serial.begin(250000);
}
void loop() {
if(Serial.available()>0){
byte data = Serial.read();
if(data != 10){ //改行で分岐
if(data >=48 and data<=57){ //受け取ったのが整数なら保存
digit_inv++;
NUMs[digit_inv]=data-48;
}
}else{
//整数化
int hoge = 0;
int digit_all = digit_inv;
while(true){
hoge += NUMs[digit_inv]*int(pow(10,digit_all - digit_inv));
digit_inv --;
if(digit_inv < 0){
break;
}
}
//hoge に結果が保管されている
Serial.println(hoge);
}
}
추가, 일단 움직이지만
digit_inv의 움직임이 조금 이상할 수 있습니다.
NUMs [0] 사용하지 않음
서보 사용에 사용한 예
숫자 입력뿐만 아니라
"a"로 +10
"s"로 +1
"d"로 -1
"f"로 -10
의 기능을 추가한 결과
#include <Servo.h>
Servo myservo;
#define sw_s A0
#define servo 10
byte NUMs[100]; //データ保存用
int digit_inv = 0; //保存桁番号逆順
int result = 0;
boolean shortcut_flag = false; //ショートカットキーを使った後ならLFを無視する
int angle;
void setup() {
pinMode(sw_s, INPUT);
pinMode(servo, OUTPUT);
myservo.attach(servo);
Serial.begin(250000);
angle = 90;
}
void loop() {
if (Serial.available() > 0) {
byte data = Serial.read();
if (data != 10) { //改行で分岐
if (data >= 48 and data <= 57) { //受け取ったのが整数なら保存
NUMs[digit_inv] = data - 48;
digit_inv++;
shortcut_flag = false;
} else if (data == 97) { // a
result += 10;
shortcut_flag = true;
} else if (data == 115) { // s
result += 1;
shortcut_flag = true;
} else if (data == 100) { // d
result -= 1;
shortcut_flag = true;
} else if (data == 102) { // f
result -= 10;
shortcut_flag = true;
}
} else {
if (shortcut_flag == false) {
//整数化
int hoge = 0;
digit_inv --;
int digit_all = digit_inv ;
while (true) {
hoge += NUMs[digit_inv] * int(pow(10, digit_all - digit_inv));
digit_inv --;
if (digit_inv < 0) {
digit_inv = 0;
break;
}
}
result = hoge;
} else {
digit_inv = 0; //とりあえず初期化
}
}
}
angle = result;
if (angle < 0) {
angle = 0;
} else if (angle > 180) {
angle = 180;
}
myservo.write(angle);
Serial.print(result);
Serial.print(" ");
Serial.println(angle);
delay(50);
}
Reference
이 문제에 관하여(Arduino의 Serial 모니터에서 두 자리 이상의 숫자를받는 템플릿), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hiRina/items/620d7e3516968114ca8b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
에서 줄 바꿈을 "LF"로 만드십시오.
LF는 10진수로 "10"입니다.
주의: 4자리 이상이 되면 pow 함수의 오차가 커지므로
int(pow(10,3))=999
코드
byte NUMs[100]; //データ保存用
int digit_inv=0; //保存桁番号逆順
void setup() {
Serial.begin(250000);
}
void loop() {
if(Serial.available()>0){
byte data = Serial.read();
if(data != 10){ //改行で分岐
if(data >=48 and data<=57){ //受け取ったのが整数なら保存
digit_inv++;
NUMs[digit_inv]=data-48;
}
}else{
//整数化
int hoge = 0;
int digit_all = digit_inv;
while(true){
hoge += NUMs[digit_inv]*int(pow(10,digit_all - digit_inv));
digit_inv --;
if(digit_inv < 0){
break;
}
}
//hoge に結果が保管されている
Serial.println(hoge);
}
}
추가, 일단 움직이지만
digit_inv의 움직임이 조금 이상할 수 있습니다.
NUMs [0] 사용하지 않음
서보 사용에 사용한 예
숫자 입력뿐만 아니라
"a"로 +10
"s"로 +1
"d"로 -1
"f"로 -10
의 기능을 추가한 결과
#include <Servo.h>
Servo myservo;
#define sw_s A0
#define servo 10
byte NUMs[100]; //データ保存用
int digit_inv = 0; //保存桁番号逆順
int result = 0;
boolean shortcut_flag = false; //ショートカットキーを使った後ならLFを無視する
int angle;
void setup() {
pinMode(sw_s, INPUT);
pinMode(servo, OUTPUT);
myservo.attach(servo);
Serial.begin(250000);
angle = 90;
}
void loop() {
if (Serial.available() > 0) {
byte data = Serial.read();
if (data != 10) { //改行で分岐
if (data >= 48 and data <= 57) { //受け取ったのが整数なら保存
NUMs[digit_inv] = data - 48;
digit_inv++;
shortcut_flag = false;
} else if (data == 97) { // a
result += 10;
shortcut_flag = true;
} else if (data == 115) { // s
result += 1;
shortcut_flag = true;
} else if (data == 100) { // d
result -= 1;
shortcut_flag = true;
} else if (data == 102) { // f
result -= 10;
shortcut_flag = true;
}
} else {
if (shortcut_flag == false) {
//整数化
int hoge = 0;
digit_inv --;
int digit_all = digit_inv ;
while (true) {
hoge += NUMs[digit_inv] * int(pow(10, digit_all - digit_inv));
digit_inv --;
if (digit_inv < 0) {
digit_inv = 0;
break;
}
}
result = hoge;
} else {
digit_inv = 0; //とりあえず初期化
}
}
}
angle = result;
if (angle < 0) {
angle = 0;
} else if (angle > 180) {
angle = 180;
}
myservo.write(angle);
Serial.print(result);
Serial.print(" ");
Serial.println(angle);
delay(50);
}
Reference
이 문제에 관하여(Arduino의 Serial 모니터에서 두 자리 이상의 숫자를받는 템플릿), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hiRina/items/620d7e3516968114ca8b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
byte NUMs[100]; //データ保存用
int digit_inv=0; //保存桁番号逆順
void setup() {
Serial.begin(250000);
}
void loop() {
if(Serial.available()>0){
byte data = Serial.read();
if(data != 10){ //改行で分岐
if(data >=48 and data<=57){ //受け取ったのが整数なら保存
digit_inv++;
NUMs[digit_inv]=data-48;
}
}else{
//整数化
int hoge = 0;
int digit_all = digit_inv;
while(true){
hoge += NUMs[digit_inv]*int(pow(10,digit_all - digit_inv));
digit_inv --;
if(digit_inv < 0){
break;
}
}
//hoge に結果が保管されている
Serial.println(hoge);
}
}
숫자 입력뿐만 아니라
"a"로 +10
"s"로 +1
"d"로 -1
"f"로 -10
의 기능을 추가한 결과
#include <Servo.h>
Servo myservo;
#define sw_s A0
#define servo 10
byte NUMs[100]; //データ保存用
int digit_inv = 0; //保存桁番号逆順
int result = 0;
boolean shortcut_flag = false; //ショートカットキーを使った後ならLFを無視する
int angle;
void setup() {
pinMode(sw_s, INPUT);
pinMode(servo, OUTPUT);
myservo.attach(servo);
Serial.begin(250000);
angle = 90;
}
void loop() {
if (Serial.available() > 0) {
byte data = Serial.read();
if (data != 10) { //改行で分岐
if (data >= 48 and data <= 57) { //受け取ったのが整数なら保存
NUMs[digit_inv] = data - 48;
digit_inv++;
shortcut_flag = false;
} else if (data == 97) { // a
result += 10;
shortcut_flag = true;
} else if (data == 115) { // s
result += 1;
shortcut_flag = true;
} else if (data == 100) { // d
result -= 1;
shortcut_flag = true;
} else if (data == 102) { // f
result -= 10;
shortcut_flag = true;
}
} else {
if (shortcut_flag == false) {
//整数化
int hoge = 0;
digit_inv --;
int digit_all = digit_inv ;
while (true) {
hoge += NUMs[digit_inv] * int(pow(10, digit_all - digit_inv));
digit_inv --;
if (digit_inv < 0) {
digit_inv = 0;
break;
}
}
result = hoge;
} else {
digit_inv = 0; //とりあえず初期化
}
}
}
angle = result;
if (angle < 0) {
angle = 0;
} else if (angle > 180) {
angle = 180;
}
myservo.write(angle);
Serial.print(result);
Serial.print(" ");
Serial.println(angle);
delay(50);
}
Reference
이 문제에 관하여(Arduino의 Serial 모니터에서 두 자리 이상의 숫자를받는 템플릿), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hiRina/items/620d7e3516968114ca8b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)